将字符串参数传递给 JavaScript 函数

Passing a string argument to a javascript function

本文关键字:JavaScript 函数 参数传递 字符串      更新时间:2023-09-26

我多次测试了以下代码。它运行良好,我得到了"返回photoMenu_sb"的结果。ToString();" 一旦我删除字符串参数 photoFileName。但是当我声明并尝试传递字符串照片文件名时,没有任何反应。为什么?

我认为问题在于声明字符串 photoFileName 并将其传递给 javascript 函数,但我无法识别问题,因为我没有收到任何错误。某处是否有任何遗漏的报价?

[WebMethod]
public static string LoadPhotosPopup(int offset, int fetch, string IDuserInput)
{
        StringBuilder photosPopup_sb = new StringBuilder();           
        var photosPopup_query = db.Query("SELECT IDphoto], [photoFileName] FROM [photos] WHERE ([IDuser] = @0 AND [photoPublished] = 'True')  ORDER BY [photoDate] DESC OFFSET @1 ROWS FETCH NEXT @2 ROWS ONLY", IDuserInput, offset, fetch);
        foreach (var item in photosPopup_query)
        {
            var IDphoto = item.IDphoto;
            var photoFileName = item.photoFileName;
            photosPopup_sb.Append("<img src='"Images/Design/openmenu.png'" onclick='"photoMenu(" + IDphoto + ", '" + photoFileName + "') '" />");                         
         }           
        return photosPopup_sb.ToString();
    }

JavaScript

function photoMenu(IDphoto, photoFileName) {   
$.ajax({
    type: "POST",
    url: "UserControls/photosFunctions.aspx/photoMenu",
    data: "{ IDphoto: " + IDphoto + "}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        $("#CommentsMenu" + IDphoto).html(data.d);
    }
})

}

[WebMethod]
            {   StringBuilder photoMenu_sb = new StringBuilder();                        
        photoMenu_sb.Append("<label>Testing </label>");
        return photoMenu_sb.ToString();
    }

更新由于公共静态字符串照片菜单(int IDphoto,字符串照片文件名)期望 2 个参数然后

 data: "{ IDphoto: " + IDphoto + "}", in the javascript function should be 
 data: "{ IDphoto: " + IDphoto + ", photoFileName: '" + photoFileName + "'}",

尝试创建一个包含 javascript 函数字符串的字符串变量:

var img = String.Format("<img src='Images/Design/openmenu.png' onclick='photoMenu({0},'{1}')' />", item.IDphoto, item.photoFileName);
photosPopup_sb.Append(img);  

在你的 JavaScript 中,你还需要为 photofileName 参数设置 json data 属性:

function photoMenu(IDphoto, photoFileName) {   
    $.ajax({
        type: "POST",
        url: "UserControls/photosFunctions.aspx/photoMenu",
        data: "{ IDphoto: " + IDphoto + ", photoFileName: '" + photoFileName + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
           $("#CommentsMenu" + IDphoto).html(data.d);
        }
    }); 
}

我认为你缺少一个括号")":

photosPopup_sb.Append("<img src='"Images/Design/openmenu.png'" onclick='"photoMenu(" + IDphoto + ", '" + photoFileName + "')'" />"); 

我没有看到您的photoFileName的示例值,但如果它有反斜杠,您可能必须确保字符串正确转义。

例如:

//causes errors
called(1, 'file'path'img.png');
//successful
called(1, 'file/path/img.png');