0

我正在尝试使用 JSON 作为 Ajax 请求的返回类型(使用 jQuery),但我的代码总是导致错误。我尝试在 json 和 jsonp 之间更改 MIME 类型,但无济于事。

我也不确定我是否正在格式化数据:部分正确。我知道我需要将其所有信息包装在 JSON 字符串中,但我不知道它是否正确。

$.ajax({

    type: "POST",
    url: '-----',
    dataType: "jsonp",
    data: '{"jobtitle":"job"}',

    beforeSend:function(){ },


    success: function(data){
        var data = $.parseJSON(data);           

    },
    error: function(){
        alert("error with Ajax request");
    }

});

编辑:这是我的服务器端代码。我不知道如何从中返回有效的 JSON。

<?php 


$jobtitle = $_POST["jobtitle"];
$city = $_POST["city"];
$state = $_POST["state"];



$url = "http://www.indeed.com/jobs?q=". $jobtitle ."&l=". $city ."%2C". $state;
$document = new DOMDocument;

$html = file_get_contents($url);
$document ->loadHTML($html);
$xpath= new DOMXPath($document);

$results = $xPath->query('//div[@id="searchCount"]');

$string = "";

if ($results){
    for ($i=0; $i < $results->length; $i++) {
            $node = $results->item($i)->textContent;


    }
    $exp = explode(" ", $node);

    print "Number of jobs: <b>".$exp[5]. "</b>";


}
4

4 回答 4

1

去掉这个单引号

 data: '{"jobtitle":"job"}',

让它

 data: {"jobtitle":"job"},

您的数据类型应该是json. 带填充的 JSON (jsonp) 用于跨域 ajax(ish) 请求。

并且在您的成功回调数据中将是一个 json 对象而不是一个 json 字符串,所以

 var data = $.parseJSON(data);  

不需要。

于 2013-08-02T18:46:05.237 回答
0

无论您的服务器代码是什么,您都不能简单地调用$.parseJSON(data). 如果服务器实际返回 JSONP,则格式data如下

clientSideMethodName({ ... actual JSON data ... });

如果您的服务器返回 JSON,您必须 a) 在请求中通过dataType属性指定它或 b) 完全删除该属性以让 jQuery 去猜测。jQuery 很棒,所以我认为它会正确地猜到 - 无论哪种情况,它都会自动.parseJSON()为您调用,因此您的手动调用也会失败。

于 2013-08-02T18:49:17.487 回答
0

你为什么不尝试这样的ajax请求:

$.post(url,{"jobtitle" : "job"},function(response) 
  { 
     console.log(response);  
 },'json').error(function()
      {
          alert("error with Ajax request");
      });
于 2013-08-02T18:49:34.670 回答
0

代替:

print "Number of jobs: <b>".$exp[5]. "</b>";

你需要这样做:

// send sexy JSON formatted string back to the AJAX call ;)
echo json_encode("Number of jobs: <b>".$exp[5]. "</b>");

为了进一步使 JSON 有用,实现并学习这个片段:

// send even sexier array formatted in JSON ;) ;)
echo json_encode(array('index1'=>'somevalue1','index2'=>'somevalue2','index3'=>'somevalue3','index4'=>'somevalue4'));

也代替:

dataType: "jsonp",

试试json:

dataType: "json",

我认为jsonp与跨域请求有关。我还没有实现 JSONP 的乐趣,但我认为这就是它的作用:p

你也可以摆脱这个:

var data = $.parseJSON(data);

在它的地方试一试

console.log(data); // this is my best buddy
于 2013-08-02T20:55:33.833 回答